package com.own.component.util.excel.util.write.method;

import com.own.component.util.excel.model.Coordinate;
import com.own.component.util.excel.util.write.model.Style;
import com.own.component.util.excel.util.write.record.ExcelRecord;

/**
 * BaseStyleMethod
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public interface BaseStyleMethod extends BaseValueMethod {

    /**
     * 设置单元格样式
     *
     * @param style 样式
     * @return 表格对象
     */
    default ExcelRecord setStyle(Style style) {
        var sheet = sheet();
        return setStyle(sheet.getX(), sheet.getY(), style);
    }

    /**
     * 设置单元格样式
     *
     * @param x     x坐标
     * @param y     y坐标
     * @param style 样式
     * @return 表格对象
     */
    default ExcelRecord setStyle(int x, int y, Style style) {
        return setStyle(x, y, style, true);
    }

    /**
     * 设置单元格样式
     *
     * @param x       x坐标
     * @param y       y坐标
     * @param style   样式
     * @param refresh 是否刷新位置
     * @return 表格对象
     */
    default ExcelRecord setStyle(int x, int y, Style style, boolean refresh) {
        var sheet = sheet();
        var writeMap = sheet.getWriteMap();
        var list = sheet.getList();
        var key = Coordinate.buildKey(x, y);
        if (writeMap.containsKey(key)) {
            if (refresh) {
                // 刷新当前的最值
                sheet.setCoordinate(x, y);
            }
            var item = list.get(writeMap.get(key));
            item.setStyle(style);
        } else {
            setValue(x, y, "", style, refresh);
        }
        return excel();
    }

    /**
     * 清除单元格格式
     *
     * @return 表格对象
     */
    default ExcelRecord clearStyle() {
        var sheet = sheet();
        return clearStyle(sheet.getX(), sheet.getY());
    }

    /**
     * 清除单元格格式
     *
     * @param x x坐标
     * @param y y坐标
     * @return 表格对象
     */
    default ExcelRecord clearStyle(int x, int y) {
        var sheet = sheet();
        var item = sheet.getItem(x, y);
        item.setStyle(null);
        return excel();
    }

    /**
     * 设置默认的单元格样式
     *
     * @param style 样式
     * @return 表格对象
     */
    default ExcelRecord setDefaultStyle(Style style) {
        var sheet = sheet();
        sheet.setDefaultStyle(style);
        return excel();
    }

    /**
     * 清除默认的单元格样式
     *
     * @return 表格对象
     */
    default ExcelRecord clearDefaultStyle() {
        var sheet = sheet();
        sheet.setDefaultStyle(null);
        return excel();
    }

}
